<?php

namespace app\api\controller;

use app\admin\model\express\Companys;
use app\admin\model\kd\Callback;
use app\admin\model\month\Salary;
use app\admin\model\product\Listo;
use app\admin\model\product\Order;
use app\admin\model\Transport;
use app\admin\model\user\Sign;
use app\common\controller\Api;
use app\common\controller\Kd100;
use app\common\controller\RedisCluster;
use think\Db;
use think\Exception;

/**
 * 示例接口
 */
class Demo extends Api
{

    //如果$noNeedLogin为空表示所有接口都需要登录才能请求
    //如果$noNeedRight为空表示所有接口都需要验证权限才能请求
    //如果接口已经设置无需登录,那也就无需鉴权了
    //
    // 无需登录的接口,*表示全部
    protected $noNeedLogin = ['test', 'test1', 'test2', 'sendAppMsg'];
    // 无需鉴权的接口,*表示全部
    protected $noNeedRight = ['test', 'test1', 'test2', 'sendAppMsg'];

    /**
     * 测试方法
     *
     * @ApiTitle    (测试名称)
     * @ApiSummary  (测试描述信息)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/demo/test/id/{id}/name/{name})
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="id", type="integer", required=true, description="会员ID")
     * @ApiParams   (name="name", type="string", required=true, description="用户名")
     * @ApiParams   (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturnParams   (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据返回")
     * @ApiReturn   ({
    'code':'1',
    'msg':'返回成功'
    })
     */
    public function test()
    {
//        $lists = Listo::field('id,tool')->where('id', 2646)->where('status', '>=', 10)->select();
//        foreach ($lists as $v1) {
//            $content = Callback::where('content', 'like', '%' . $v1->tool . '%')->order('id desc')->value('content');
//            if (!$content) {
//                continue;
//            }
//
//            $data = json_decode($content, true);
//            $res = $data['lastResult'];
//            $state = $res['state'];
//
//            $info = reset($res["data"]);
//            if (!$info) {
//                continue;
//            }
//            $time = strtotime($info['time']);
//
////        $res = Listo::find(26)->toArray();
////        $state = $res['status'];
//
//            $state_arr = [
//                1 => 10,//发货
//                0 => 11,//在途
//                5 => 12,//派件
//                6 => 13,//退回
//                4 => 14,//退签
//                7 => 15,//转投
//                2 => 16,//疑难
//                14 => 17,//拒签
//                3 => 20,//签收
//            ];
//
//            $status = $state_arr[$state];
//            if ($status == 20) {
//                // 签收
//                $ldata = [
//                    'status' => $status,
//                    'backinfo' => 'success',
//                    'finish_time' => $time,
//                    'updatetime' => $time
//                ];
//            } else {
//                $ldata = [
//                    'status' => $status,
//                ];
//
//                if ($status == 13) {
//                    $ldata['backinfo'] = 'fail';
//                    $ldata['updatetime'] = $time;
//                }
//            }
//
////            Db::startTrans();
////            try {
//            $tool = $res['nu'];
////                $tool = $res['tool'];
//            $lists = Listo::where('tool', $tool)->select();
//
//            foreach ($lists as $val) {
//                Db::name('product_listo')->where('id', $val->id)->update($ldata);
//                $num = Listo::where('order_id', $val->order_id)->where('status', 'lt', $status)->count();
//                if ($num == 0) {
//                    Db::name('product_order')->where('id', $val->order_id)->update($ldata);
//                }
//
//                $oInfo = \app\admin\model\product\Order::where('id', $val->order_id)->find();
//            }
//
//            if (in_array($status, [13, 20])) {
//                if ($status == 20) {
//                    $type = 'profile';
//                    $money = round($oInfo->total * $oInfo->rate * 0.01, 2);
//                    $content = '您好，运单号' . $v1->tool . '的商品已被签收，分红到账' . $money . '元';
//                } else {
//                    $type = 'cost';
//                    $content = '您好，运单号' . $v1->tool . '的商品已被退回，产生物流损耗' . $oInfo->transfee . '元';
//                }
//
//                $department_user_id = $oInfo->department_user_id;
//                $ndata = [
//                    'user_id' => $department_user_id,
//                    'type' => $type,
//                    'relation_id' => $oInfo->id,
//                    'content' => $content,
//                    'is_read' => 0,
//                ];
//                \app\admin\model\Notices::create($ndata);
//
//                $user = \app\admin\model\department\User::find($department_user_id);
//                if ($user->is_leader == 0) {
//                    $luser = \app\admin\model\department\User::where('department_id', $user->department_id)
//                        ->where('is_leader', 1)
//                        ->find();
//                    if ($luser) {
//                        $content = str_replace('您好，', '您好，' . $user->username . '的', $content);
//                        $ndata = [
//                            'user_id' => $luser->id,
//                            'type' => $type,
//                            'relation_id' => $oInfo->id,
//                            'content' => $content,
//                            'is_read' => 0,
//                        ];
//                        \app\admin\model\Notices::create($ndata);
//                    }
//                }
//            }
//
////                Db::commit();
////            } catch (Exception $e) {
////                Db::rollback();
////            }
//
//
//        }
//
//        echo json_encode([
//            "result" => true,
//            "returnCode" => "200",
//            "message" => "成功"
//        ]);
//        die;
//
//        (new Common())->sendAppMsg(170, 'badge');
//        (new Common())->sendAppMsg(2, 'badge');

//        $time = 20 * 60;
//        $lists = Sign::order('id desc')->select();
////        var_dump($lists);die;
//        foreach ($lists as $row) {
//            $data = sign_config($row->user_id);
//            unset($data[1], $data[3]);
////var_dump($data);die;
//            foreach ($data as $val) {
//                $createtime = strtotime(date('H:i', $row->createtime));
//                $start = strtotime($val[0]);
//                $end = strtotime($val[1]);
//                if ($createtime >= $start && $createtime <= $end) {
//                    if ($createtime >= ($end - $time)) {
//                        $row->is_late = 1;
//                    }
//                }
//            }
//            var_dump($row->id);
//        }

//        $redis = new RedisCluster();
//        $lkey = 'user_sign_lists';
//        $skey = 'user_sign_sets';
//        $res2 = $redis->sremmember($skey, '2');
//        var_dump($res2);die;
//        $sinfo = $redis->rpop($lkey);
//        if (!$sinfo) {
//            return;
//        }

//        $sarr = explode('_', $sinfo);
//        $userId = $sarr[0];
//        $now = $sarr[1];
//        $is_late = $sarr[2];
//        $image = $sarr[3];
//
//        $user = \app\admin\model\department\User::find($userId);
//        Db::startTrans();
//        try {
//
//            // 超过7天未打卡激励收益归零
//            if ($user->is_year_bonus == 1 && $user->is_unfreeze_year_bonus == 0) {
//                $lastSignTime = Sign::where('user_id', $userId)->order('id desc')->value('createtime');
//                if ($lastSignTime) {
//                    $times = 6 * 24 * 60 * 60;
//                    if ($now - $lastSignTime >= $times) {
//                        $user->has_year_bonus = 0;
//                        $user->save();
//                    }
//                }
//            }
//
//            $sdata = [
//                'user_id' => $userId,
//                'createtime' => $now,
//                'image' => $image,
//                'is_late' => $is_late,
//            ];
//
//            Sign::create($sdata);
//
//            $today = strtotime('today');
//            $num = Sign::where('user_id', $userId)->where('createtime', '>', $today)->count();
//
//            if (in_array($num, [2, 4])) {
//                // 添加激励收益（冻结中才可以）
//                if ($user->is_year_bonus == 1 && $user->is_unfreeze_year_bonus == 0) {
//                    $half_year_bonus = config('site.half_year_bonus');
//                    $total_year_bonus = config('site.total_year_bonus');
//                    $user->has_year_bonus += $half_year_bonus;
//                    if ($user->has_year_bonus >= $total_year_bonus) {
//                        $user->has_year_bonus = $total_year_bonus;
//                        $user->is_unfreeze_year_bonus = 1;
//                    }
//                    $user->save();
//                }
//
//                if ($user->type == 1) {
//                    // 员工增加月薪
//                    $salary = round($user->day_salary / 2, 2);
//                    $month = strtotime(date('Y-m', $now));
//                    $where = [
//                        'user_id' => $userId,
//                        'datetime' => $month,
//                    ];
//
//                    $row = Salary::where($where)->find();
//                    if ($row) {
//                        $row->salary += $salary;
//                        $row->save();
//                    } else {
//                        $where['salary'] = $salary;
//                        $ret = Salary::create($where);
//                    }
//
//                }
//            }
//
//            // 提交事务
//            Db::commit();
//        } catch (\Exception $e) {
//            // 回滚事务
//            Db::rollback();
//            $this->error($e->getMessage());
//        }
//        $skey = 'user_sign_sets';
//        $res1 = $redis->sismember($skey, '1');
//        if ($res1) {
//            $this->error('签到申请已提交，请耐心等待！');
//        }
//
//        $res = $redis->lpush($lkey, '1_sdfsdfsd_1_sfdsdfsdfsdfsdf');
//        if ($res) {
//            $redis->sadd($skey, '1');
//        }
//        var_dump($res);
//        die;
//        $where = [
//            'createtime' => [['>=', 1736414765], ['<', 1736414765]],
//            'user_id' => 2,
//        ];
//        $sinfo = Sign::where($where)->find();
//        var_dump(Sign::getLastSql());die;
//
//        for ($i = 1; $i <= 10; $i++) {
//            $url = 'https://app.guoshangufen.com/company/Usersign/signing1';
//            $data = [
//                'image' => 'sdfsd'
//            ];
//            $res = post_send_data($url, $data);
//            var_dump($res);
//        }
//        $sinfo = $redis->rpop($key);
//        var_dump($sinfo);

        $redis = new RedisCluster();

        $key = 'ceshi';
        $redis->set($key, time(), 20);

        echo 'success';
    }

    /**
     * 无需登录的接口
     *
     */
    public function test1()
    {
//        $lists = Db::name('kd_callback1')->limit(13000, 2000)->select();
//        foreach ($lists as $val) {
//            $cdata = [
//                'id' => $val['id'],
//                'content' => $val['content'],
//                'createtime' => $val['createtime'],
//            ];
//
//            Callback::create($cdata);
//        }

        $list = Order::where('backinfo', 'success')->where('status', '<>', 20)->select();
        foreach ($list as $val) {
            var_dump($val->id);
            $val->status = 20;
            $val->save();

            Listo::where('order_id', $val->id)->update(['status' => 20]);
        }
        $this->success('返回成功', ['action' => 'test1']);
    }

    /**
     * 需要登录的接口
     *
     */
    public function test2()
    {
        // 顺丰速运，顺丰快运补充手机号码
//        $lists = Listo::where('status', 'in', '16')
////            ->where('id', 5431)
////            ->where('id', '>', 20000)
////            ->where('id', '<', 25000)
////            ->
////            ->where('status', '<', 20)
////            ->limit(370, 200)
//            ->select();
//        var_dump(count($lists));
//        die;
//        $state_arr = [
//            1 => 10,//发货
//            0 => 11,//在途
//            5 => 12,//派件
//            6 => 13,//退回
//            4 => 14,//退签
//            7 => 15,//转投
//            2 => 16,//疑难
//            14 => 17,//拒签
//            3 => 20,//签收
//        ];
//        foreach ($lists as $val1) {
//            $orderInfo = $val1;
//            if (!$orderInfo) {
//                $this->error('该订单不存在！');
//            }
//
//            $code = Companys::where('id', $orderInfo->toolid)->value('code');
//            $addressId = \app\admin\model\product\Order::where('id', $val1->order_id)->value('addressid');
//            $mobile = Transport::where('id', $addressId)->value('mobile');
//            $res = (new Kd100())->logisticsInfo_cs($code, $orderInfo->tool, $mobile);
////            if ($data['code'] == 0) {
////                $this->error($data['msg']);
////            }
////            var_dump($res);die;
//            $res = $res['data'];
//            if (isset($res["result"]) && $res["result"] == false) {
//                continue;
//            }
//
//            $state = $res['state'];
//            $info = reset($res["data"]);
//            $time = strtotime($info['time']);
//            $tool = $res['nu'];
//            $status = $state_arr[$state];
//            if ($status == $val1->status) {
//                continue;
//            }
//            var_dump($val1->id . '-' . $status);
//            if ($status == 20) {
//                // 签收
//                $ldata = [
//                    'status' => $status,
//                    'backinfo' => 'success',
//                    'finish_time' => $time,
//                    'updatetime' => $time
//                ];
//            } else {
//                $ldata = [
//                    'status' => $status,
//                ];
//
//                if ($status == 13) {
//                    $ldata['backinfo'] = 'fail';
//                    $ldata['updatetime'] = $time;
//                }
//            }
//
//            Db::startTrans();
//            try {
//
////                $tool = $res['tool'];
//                $lists = Listo::where('tool', $tool)->select();
//
//                foreach ($lists as $val) {
//                    Db::name('product_listo')->where('id', $val->id)->update($ldata);
//                    $num = Listo::where('order_id', $val->order_id)->where('status', 'lt', $status)->count();
//                    if ($num == 0) {
//                        Db::name('product_order')->where('id', $val->order_id)->update($ldata);
//                    }
//
//                }
//
//                Db::commit();
//            } catch (Exception $e) {
//                Db::rollback();
//            }

//        }

//        foreach ($lists as $val1) {
//            // 物流信息订阅
//            $toolInfo = Companys::where('id', $val1->toolid)->find();
//            $addressId = \app\admin\model\product\Order::where('id', $val1->order_id)->value('addressid');
//            $mobile = Transport::where('id', $addressId)->value('mobile');
//
//            if ($toolInfo) {
//                $ret = (new Kd100())->logisticsSb($toolInfo->code, $val1->tool, $mobile);
//                if ($ret['code'] == 0) {
//                    if ($ret['error_code'] != 501) {
//                        Db::rollback();
//                        $this->error($ret['msg']);
//                    }
//                }
//            }
//        }

        $this->success('返回成功', ['action' => 'test2']);
    }

    /**
     * 需要登录且需要验证有相应组的权限
     *
     */
    public function test3()
    {
        $this->success('返回成功', ['action' => 'test3']);
    }

}
